/**
 * Initialize your data structure here.
 * 将一个栈作为输入栈，用于压入push传入的数据  一个栈作为输出栈，用于pop 和peek 的操作
 * 每次pop 或者peek 的时候， 若输出栈为空 则将输入栈的全部数据依次弹出并压入输出栈
 * 这样输出栈从栈顶往栈底的顺序就是队列从队首往队尾的顺序
 */
var MyQueue = function() {
    // 创建一个入队栈和一个出队栈
    this.is = []
    this.os = []
};

/**
 * Push element x to the back of queue.
 * @param {number} x
 * @return {void}
 */
// 将元素x 推到队列的末尾
MyQueue.prototype.push = function(x) {
    this.is.push(x)
};

/**
 * Removes the element from in front of queue and returns that element.
 * @return {number}
 */
// 从队列的开头移除并返回元素
MyQueue.prototype.pop = function() {
    if (!this.os.length) {
        while (this.is.length) {
            this.os.push(this.is.pop())
        }
    }
    return this.os.pop()
};
/**
 * Get the front element.
 * @return {number}
 */
// 返回队列的开头元素
MyQueue.prototype.peek = function() {
    if (!this.os.length) {
        while (this.is.length) {
            this.os.push(this.is.pop())
        }
    }
    return this.os[this.os.length - 1]
};

/**
 * Returns whether the queue is empty.
 * @return {boolean}
 */
//  如果队列为空 返回true  否则 返回false
MyQueue.prototype.empty = function() {
    return !this.is.length && !this.os.length
};

/**
 * Your MyQueue object will be instantiated and called as such:
 * var obj = new MyQueue()
 * obj.push(x)
 * var param_2 = obj.pop()
 * var param_3 = obj.peek()
 * var param_4 = obj.empty()
 */